【k8s】安装的困难汇总和解决方法

05月24日17时

Pods反复重启

container默认依赖cgroupfs来作为cgroup驱动。而k8s在1.22版本以上会默认使用systemd来驱动cgroup。

要确保container的默认cgroup驱动是systemd,需要修改containerd的配置文件:

containerd config default | tee /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml  
service containerd restart
service kubelet restart

参考自:https://stackoverflow.com/questions/55571566/unable-to-bring-up-kubernetes-api-server

也可以通过修改kubelet的配置文件来实现,参考https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/。

Flannel报错

Failed to check br_netfilter: stat /proc/sys/net/bridge/bridge-nf-call-
iptables: no such file or directory

系统缺少br_netfilter内核导致。

解决步骤如下:

sudo modprobe br_netfilter

echo 'br_netfilter' | sudo tee /etc/modules-load.d/br_netfilter.conf

echo 'net.bridge.bridge-nf-call-iptables=1' | sudo tee /etc/sysctl.d/99-bridge-nf.conf
echo 'net.bridge.bridge-nf-call-ip6tables=1' | sudo tee -a /etc/sysctl.d/99-bridge-nf.conf

sudo sysctl --system

k8s会利用iptables实现一些高级功能,而网桥会绕过iptables规则,所以需要开启br_netfilter内核,让流量经过iptables。